const fs = require('fs');
const path = require('path');
const { FileModel } = require('../models');

class FileService {
  constructor() {
    this.fileModel = FileModel;
  }

  // 上传文件
  async uploadFile(fileInfo) {
    try {
      // 将文件信息保存到数据库
      const fileId = await this.fileModel.createFile({
        filename: fileInfo.originalname,
        filepath: fileInfo.path,
        mimetype: fileInfo.mimetype,
        size: fileInfo.size
      });

      // 生成文件访问URL
      const fileUrl = `/uploads/${path.basename(fileInfo.path)}`;

      return {
        success: true,
        data: {
          url: fileUrl,
          id: fileId,
          filename: fileInfo.originalname,
          size: fileInfo.size
        },
        message: '上传成功'
      };
    } catch (error) {
      console.error('文件上传服务错误:', error);
      return {
        success: false,
        error: error.message,
        message: '上传失败，请稍后重试'
      };
    }
  }

  // 获取文件列表
  async getFileList() {
    try {
      const files = await this.fileModel.getAllFiles();
      
      // 为每个文件添加访问URL
      const filesWithUrl = files.map(file => ({
        ...file,
        url: `/uploads/${path.basename(file.filepath)}`
      }));

      return {
        success: true,
        data: {
          records: filesWithUrl,
          total: files.length
        },
        message: '获取成功'
      };
    } catch (error) {
      console.error('获取文件列表服务错误:', error);
      return {
        success: false,
        error: error.message,
        message: '获取文件列表失败'
      };
    }
  }

  // 删除文件
  async deleteFile(fileId) {
    try {
      // 首先获取文件信息
      const file = await this.fileModel.getFileById(fileId);

      if (!file) {
        return {
          success: false,
          message: '文件不存在',
          status: 404
        };
      }

      // 删除文件系统中的文件
      if (fs.existsSync(file.filepath)) {
        fs.unlinkSync(file.filepath);
      }

      // 删除数据库记录
      await this.fileModel.deleteFile(fileId);

      return {
        success: true,
        message: '删除成功'
      };
    } catch (error) {
      console.error('删除文件服务错误:', error);
      return {
        success: false,
        error: error.message,
        message: '删除失败'
      };
    }
  }
}

module.exports = FileService;